home *** CD-ROM | disk | FTP | other *** search
- Listing 3
-
- /*****************************************************/
- /* tstcombo.c */
- /* -- Exercise the LpfnSubclassComboEdit() routine. */
- /*****************************************************/
-
- #include <windows.h>
- #include "comboed.h"
-
- FARPROC lpfnEdit; /* Original EditItem wind. proc. */
- FARPROC lpfnFilter; /* Subclass for above. */
-
- /* Subclasser for ComboBox's EditItem. Don't forget */
- /* to export in .def file! */
- LONG FAR PASCAL EditSubclasser(HWND, WORD, WORD,
- DWORD);
-
- VOID
- TestComboEdit(HWND hwndCombo)
- /*****************************************************/
- /* -- Install a subclasser for the given ComboBox to */
- /* demonstrate the LpfnSubclassComboEdit() */
- /* routine. */
- /* -- hwndCombo : ComboBox window handle. */
- /*****************************************************/
- {
- /* Create a procedure instance of the subclasser. */
- lpfnFilter = MakeProcInstance(
- (FARPROC)EditSubclasser,
- (HANDLE)GetWindowWord(hwndCombo, GWW_HINSTANCE));
- if (lpfnFilter == NULL)
- return; /* Failure. */
-
- /* Attempt to install the subclasser. */
- lpfnEdit =
- LpfnSubclassComboEdit(lpfnFilter, hwndCombo);
- if (lpfnEdit == NULL)
- FreeProcInstance(lpfnFilter); /* Failure. */
- }
-
- LONG FAR PASCAL
- EditSubclasser(HWND hwnd, WORD wMessage, WORD wParam,
- DWORD lwParam)
- /*****************************************************/
- /* -- Window proc to subclass the EditItem of a */
- /* ComboBox. */
- /* -- Display a string with double-clicked. */
- /* -- Free our proecudure instance handle when done. */
- /*****************************************************/
- {
- BOOL fHandled; /* Handled the message? */
-
- switch (wMessage)
- {
- default:
- fHandled = FALSE;
- break;
-
- case WM_LBUTTONDBLCLK:
- SetWindowText(hwnd, "Left double click");
- fHandled = TRUE;
- break;
-
- case WM_RBUTTONDBLCLK:
- SetWindowText(hwnd, "Right double click");
- fHandled = TRUE;
- break;
-
- case WM_DESTROY:
- /* Free the procedure instance and restore */
- /* the origial window proc. */
- FreeProcInstance(lpfnFilter);
- SetWindowLong(hwnd, GWL_WNDPROC,
- (LONG)lpfnEdit);
- fHandled = FALSE;
- break;
- }
-
- if (fHandled)
- return 0L;
-
- /* Pass this off to the EditItem's original */
- /* Window Procedure. */
- return CallWindowProc(lpfnEdit, hwnd, wMessage,
- wParam, lwParam);
- }
-
-